' DateHandline.bas
#COMPILE EXE
#DIM ALL
#DEBUG ERROR ON

' include the common display library
#INCLUDE "win32api.inc"
#INCLUDE "..\Libraries\CommonDisplay.inc"
'
FUNCTION PBMAIN () AS LONG
' the main PB function that is the first to be executed
  funPrepOutput("Date verification",0,0,40,120)
  '
  funLog("Walk through on easy date verification")
  '
  LOCAL strDate AS STRING
  '
  ' Test UK date format
  strDate = "31/06/2021"
  '
  IF ISTRUE funIsDateValid_dd_MM_yyyy(strDate) THEN
    CON.STDOUT strDate & " is valid"
  ELSE
    CON.STDOUT strDate & " is not valid"
  END IF

  ' Test US Date format
  strDate = "02/29/2020"
  IF ISTRUE funIsDateValid_MM_dd_yyyy(strDate) THEN
    CON.STDOUT strDate & " is valid"
  ELSE
    CON.STDOUT strDate & " is not valid"
  END IF

  funWait()
  '
END FUNCTION
'
FUNCTION funIsDateValid_dd_MM_yyyy(strDate AS STRING) AS LONG
' accept date in dd/MM/yyyy format
  LOCAL lngYear AS LONG
  LOCAL lngMonth AS LONG
  LOCAL lngDay AS LONG
  '
  lngYear  = VAL(RIGHT$(strDate,4))
  lngMonth = VAL(MID$(strDate,4,2))
  lngDay   = VAL(LEFT$(strDate,2))
  '
  FUNCTION = funIsDateValid(lngYear,lngMonth,lngDay)
  '
END FUNCTION
'
FUNCTION funIsDateValid_MM_dd_yyyy(strDate AS STRING) AS LONG
' accept date in MM/DD/yyyy format
  LOCAL lngYear AS LONG
  LOCAL lngMonth AS LONG
  LOCAL lngDay AS LONG
  '
  lngYear  = VAL(RIGHT$(strDate,4))
  lngMonth = VAL(LEFT$(strDate,2))
  lngDay   = VAL(MID$(strDate,4,2))
  '
  FUNCTION = funIsDateValid(lngYear,lngMonth,lngDay)
  '
END FUNCTION
'
FUNCTION funIsDateValid(lngYear AS LONG, _
                        lngMonth AS LONG, _
                        lngDay AS LONG) AS LONG
' accept Date in three variable format
' and return true/false if date is valid of not
  LOCAL lngDate AS IPOWERTIME
  LET lngDate = CLASS "PowerTime"
  '
  ' attempt to populate the date
  lngDate.Newdate(lngYear,lngMonth,lngDay)
  '
  IF OBJRESULT = %S_OK THEN
  ' no error occurred - date must be valid
    FUNCTION = %TRUE
  ELSE
  ' error occurred - date is not valid
    FUNCTION = %FALSE
  END IF
'
END FUNCTION